---
title: |
    | Online Appendix to
    | 'Wind Turbines, Public Acceptance, and Electoral Outcomes'^[To be published by the [Swiss Political Science Review](https://onlinelibrary.wiley.com/journal/16626370).]
    | \vspace{0.5em}
author: |
    | Resul Umit^[Corresponding author. University of Oslo. Email: [resuluy@uio.no](mailto:resuluy@uio.no).] \hspace{0.3em} & \hspace{0.2em} Lena Maria Schaffer^[University of Lucerne. Email: [lena.schaffer@unilu.ch](mailto:lena.schaffer@unilu.ch).]
date:  |
    | 17 March 2022
output:
  pdf_document:
    fig_caption: yes
bibliography: 09_references.bib
csl: 10_apa.csl
fontsize: 11pt
link-citations: yes
linkcolor: blue
urlcolor: blue
header-includes:
    - \usepackage{setspace}\doublespacing
    - \hypersetup{pdftoolbar=true, pdfmenubar=true, pdffitwindow=false, pdfstartview={FitH}}
    - \usepackage{booktabs, pdflscape}
---

```{r setup, include=FALSE}

# global options
knitr::opts_chunk$set(
  echo = FALSE,
  cache = FALSE,
  message = FALSE,
  warning = FALSE,
  dev = "png",
  dpi = 1000,
  fig.width = 9,
  fig.height = 6,
  fig.path = "figures/",
  fig.align = "center"
)

# packages
library(rio)
library(tidyverse)
library(MASS)
library(survey)
library(stargazer)
library(viridis)

# functions
select <- dplyr::select
recode <- dplyr::recode

```

```{r data, include=FALSE}

# survey data
df <- import("03_data_survey.Rdata")

# official statistics
df_cantons <- import("04_data_cantons.Rdata")
df_demographics <- import("05_data_demographics.Rdata")

```

```{=tex}

\renewcommand{\thepage}{A\arabic{page}}
\renewcommand*{\thetable}{A\arabic{table}}
\renewcommand*{\thefigure}{A\arabic{figure}}
\renewcommand{\thefootnote}{A\arabic{footnote}}

```

## Descriptive Statistics

Table \ref{descriptive_statistics} presents the summary statistics for all the variables in the main text. For the survey questionnaire behind these variables, see the related section at the end of this document.

```{r descriptive_statistics, results="asis"}

# select and rename variables
desc_df <- df %>%
  select(
    "dv_acceptance",
    "dv_turnout",
    "dv_ntrvote",
    "dv_supvote",
    "dv_oppvote",
    "age",
    "female",
    "education",
    "income",
    "urbanrural",
    "cantonyears",
    "climate",
    "polinterest",
    "leftright"
  ) %>%
  rename(
    "Acceptance*" = "dv_acceptance",
    "Turnout*" = "dv_turnout",
    "Neutrality*" = "dv_ntrvote",
    "Supporting Vote*" = "dv_supvote",
    "Opposing Vote*" = "dv_oppvote",
    "Age" = "age",
    "Female" = "female",
    "Education" = "education",
    "Income" = "income",
    "Urban--Rural" = "urbanrural",
    "Years in Canton" = "cantonyears",
    "Climate Worries" = "climate",
    "Political Interest" = "polinterest",
    "Left--Right" = "leftright"
  )

# table the data
stargazer(
  desc_df,
  type = "latex",
  summary = TRUE,
  rownames = FALSE,
  header = FALSE,
  label = "descriptive_statistics",
  summary.stat = c("n", "mean", "median", "sd", "min", "max"),
  digits = 1,
  title = "Descriptive statistics",
  notes.append = FALSE,
  notes.align = "l",
  notes = "\\parbox[t]{10cm}{\\textit{Note}: * indicates dependent variables.}"
)

```

## Population -- Sample Comparisons

In this section, we make three comparisons between the Swiss voting-age population and our survey sample. The data on the former comes from the population statistics in 2018, as published by the Swiss Federal Statistical Office. 

Recall that we aimed at a sample that is representative of the Swiss voting-age population in terms of age, gender, and region. At the same time, we over-sampled respondents from outside urban areas for the reasons of precision in sub-group estimates. Indeed, research shows that conducting an unbiased sub-group analysis requires larger and equally-sized groups [@brookes2004; @burke2015].

Figure \ref{cantons} shows that the share of respondents from each of the 26 Swiss cantons was close to the share of population in these cantons. Zurich is an exception, which is relatively under-sampled in the survey. This could have emerged due to our strategy to under-sample urban populations.

```{r cantons, fig.height= 8, fig.cap="Population and survey respondents, by cantons. \\label{cantons}"}

# calculate sample statistics
canton_sample_df <- df %>%
  count(canton) %>%
  filter(!is.na(canton)) %>%
  mutate(prop = prop.table(n),
         source = "sample")

# calculate population statistics
canton_population_df <- df_cantons %>%
  group_by(canton) %>%
  summarise(n = sum(population)) %>%
  mutate(prop = prop.table(n),
         source = "population") %>%
  ungroup()

# merge and plot
rbind(canton_sample_df, canton_population_df) %>% 
  ggplot(aes(x = reorder(canton, prop), y = prop, colour = source)) +
  geom_point(size = 3) +
  coord_flip() +
  labs(x= NULL, y = NULL, fill="") +
  theme_minimal() +
  theme(axis.text = element_text(size = 14),
        legend.text = element_text(size = 14),
        legend.position = "top") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_colour_viridis(discrete = TRUE, name = "",
                       breaks = c("population", "sample"),
                       labels = c("Population", "Sample"))

```

Figure \ref{urbanrural} shows that our strategy to increase the balance between urban, intermediate, and rural areas had an effect on the sample; we had more respondents from intermediate and rural areas at the expense of respondents from urban areas.

```{r urbanrural, out.width="80%", fig.cap="Population and survey respondents, by urban--rural classification. \\label{urbanrural}"}

# calculate sample statistics
ur_sample_df <- df %>%
  count(urbanrural) %>%
  filter(!is.na(urbanrural)) %>%
  mutate(prop = prop.table(n),
         source = "sample")

# calculate population statistics
ur_population_df <-
  df_cantons %>%
  group_by(urbanrural) %>%
  summarise(n = sum(population)) %>%
  ungroup() %>%
  mutate(prop = prop.table(n),
         source = "population")

# merge and plot
rbind(ur_sample_df, ur_population_df) %>%
  ggplot(aes(
    x = factor(urbanrural),
    y = prop,
    fill = source
  )) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(x = NULL, y = NULL, fill = "") +
  theme_minimal() +
  theme(
    axis.text = element_text(size = 14),
    legend.text = element_text(size = 14),
    legend.position = "top"
  ) +
  scale_x_discrete(breaks = c(1, 2, 3),
                   labels = c("Urban", "Intermediate", "Rural")) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_fill_viridis(
    discrete = TRUE,
    breaks = c("population", "sample"),
    labels = c("Population", "Sample")
  )
  
```

Finally, Figure \ref{age_sex} plots the distributions of the Swiss voting-age population and our survey respondents, by age and gender. It shows that there is a considerable match between the two, although our sample was slightly younger and it had a higher share of females.

```{r age_sex, fig.cap="Population and survey respondents, by gender and age. \\label{age_sex}"}

# calculate sample statistics
as_sample_df <- df %>%
  select(age, female) %>%
  filter(!(is.na(age) & is.na(female))) %>%
  mutate(female = recode(female, `0` = "Male", `1` = "Female")) %>%
  group_by(age, female) %>%
  summarise(n = n()) %>%
  ungroup() %>%
  mutate(share = prop.table(n),
         source = "sample") %>%
  select(age, female, share, source)

# calculate population statistics
as_population_df <-
  df_demographics %>%
  mutate(female = recode(gender, "man" = "Male", "woman" = "Female")) %>%
  mutate(source = "population") %>%
  select(age, female, share, source)

# merge and plot
rbind(as_sample_df, as_population_df) %>%
  ggplot(aes(x = age, y = share, fill = source)) +
  geom_density(stat = "identity", alpha = 0.5) +
  facet_wrap(~ female) +
  labs(x = "\n\nAge", y = NULL, fill = "") +
  theme_bw() +
  theme(
    axis.text = element_text(size = 14),
    strip.text = element_text(size = 14),
    legend.text = element_text(size = 14),
    legend.position = "top"
  ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_fill_viridis(
    discrete = TRUE,
    breaks = c("population", "sample"),
    labels = c("Population", "Sample")
  )

```

\newpage

## Manipulation Check

In this section, we visualise the manipulation check failures, by question subject and survey language. Figure \ref{manipulation} shows that respondents were more likely to fail if they received the manipulation check on politicisation. However, the results are relatively similar within each language.

```{r manipulation, fig.cap="Manipulation check failures, by question subject and survey language. \\label{manipulation}"}

df %>% group_by(language, fmc_type) %>%
  count(fmc_result) %>%
  mutate(prop = prop.table(n),
         language = factor(language, levels = c("German", "French", "Italian"))) %>%
  filter(fmc_result == 0) %>%
  ggplot(aes(
    x = fmc_type,
    y = prop,
    group = language,
    fill = factor(language)
  )) +
  geom_col(position = "dodge") +
  labs(x = "\nSubject of the Manipulation Test", y = "Failures\n", fill =
         "") +
  theme_minimal() +
  theme(
    axis.title = element_text(size = 14),
    axis.text = element_text(size = 14),
    legend.title = element_text(size = 14),
    legend.text = element_text(size = 14),
    legend.position = "top"
  ) +
  scale_x_discrete(
    breaks = c("location", "exposure", "politicisation"),
    labels = c("Location", "Exposure", "Politicisation")
  ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_fill_viridis(
    discrete = TRUE,
    name = "Language:",
    breaks = c("German", "French", "Italian")
  )

```

## Vignette Screenshot

Figure \ref{screenshot} is a screenshot from the survey, showing how the experimental component appeared on screen.

```{r screenshot, out.width="70%", fig.cap="A screenshot from the survey. \\label{screenshot}"}

knitr::include_graphics("08_screenshot.png")

```

\newpage

## Complete Tables

In this section, we provide the complete results in table format for two figures in the main text: Table \ref{complete_figure2} for the average marginal component effects in Figure 2, and Table \ref{complete_figure4} for the average marginal effects in Figure 4.

```{r complete_figure2, results="asis"}

accept_m1 <-
  lm(dv_acceptance ~ iv_location + iv_exposure + iv_politicisation,
     data = df)

accept_m2 <-
  lm(
    dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df
  )

turnout_m1 <-
  lm(dv_turnout ~ iv_location + iv_exposure + iv_politicisation,
     data = df)

turnout_m2 <-
  lm(
    dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df
  )

ntrvote_m1 <-
  lm(dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation,
     data = df)

ntrvote_m2 <-
  lm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df
  )

capture.output({
  stargazer(
    accept_m1,
    accept_m2,
    turnout_m1,
    turnout_m2,
    ntrvote_m1,
    ntrvote_m2,
    type = "latex",
    title = "Complete results for Figure 2",
    order = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality",
      "Exposure",
      "Politicisation",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels.include = FALSE,
    column.labels = c("Acceptance", "Turnout", "Neutrality"),
    column.separate = c(2, 2, 2),
    header = FALSE,
    label = "complete_figure2",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE
  )
  
}) %>%
  {
    gsub(
      "{Neutrality} \\\\",
      "{Neutrality} \\\\ \\cmidrule(lr){2-3} \\cmidrule(lr){4-5} \\cmidrule(lr){6-7}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()
                
```

```{=tex}

\begin{landscape}

```{r complete_figure4, results="asis"}

int_sup_m1 <-
  lm(
    dv_supvote ~ iv_location + iv_exposure + iv_politicisation + iv_exposure:iv_politicisation,
    data = df
  )

int_sup_m2 <-
  lm(
    dv_supvote ~ iv_location + iv_exposure + iv_politicisation + iv_exposure:iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df
  )

int_sup_m3 <-
  lm(
    dv_supvote ~ iv_location + iv_exposure + iv_politicisation + iv_location:iv_politicisation,
    data = df
  )

int_sup_m4 <-
  lm(
    dv_supvote ~ iv_location + iv_exposure + iv_politicisation + iv_location:iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df
  )

int_opp_m1 <-
  lm(
    dv_oppvote ~ iv_location + iv_exposure + iv_politicisation + iv_exposure:iv_politicisation,
    data = df
  )

int_opp_m2 <-
  lm(
    dv_oppvote ~ iv_location + iv_exposure + iv_politicisation + iv_exposure:iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df
  )

int_opp_m3 <-
  lm(
    dv_oppvote ~ iv_location + iv_exposure + iv_politicisation + iv_location:iv_politicisation,
    data = df
  )

int_opp_m4 <-
  lm(
    dv_oppvote ~ iv_location + iv_exposure + iv_politicisation + iv_location:iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df
  )

capture.output({
  stargazer(
    int_sup_m3,
    int_sup_m4,
    int_sup_m1,
    int_sup_m2,
    int_opp_m3,
    int_opp_m4,
    int_opp_m1,
    int_opp_m2,
    type = "latex",
    title = "Models with interaction terms for Figure 4",
    order = c(
      "^iv_location$",
      "^iv_exposure$",
      "^iv_politicisation$",
      "^iv_location:iv_politicisation$",
      "^iv_exposure:iv_politicisation$",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality (L)",
      "Exposure (E)",
      "Politicisation (P)",
      "L $x$ P",
      "E $x$ P",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels.include = FALSE,
    column.labels = c("Supporting Vote", "Opposing Vote"),
    column.separate = c(4, 4),
    header = FALSE,
    label = "complete_figure4",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE
  )
  
  
}) %>%
  {
    gsub(
      "{Opposing Vote} \\\\",
      "{Opposing Vote} \\\\ \\cmidrule(lr){2-5} \\cmidrule(lr){6-9}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()

```

\end{landscape}

```

\newpage
## Exploratory Analyses

This section provides results from a number of exploratory analyses, which are not pre-registered. Except for the robustness check with the alternative modelling specifications in Table \ref{alternative_specifications}, these exploratory analyses have been added during the peer-review process.

### Weighted descriptive statistics

The statistics in Table \ref{weighted_descriptive_statistics} are weighted with post-stratification weights to correct for the over-sampling of respondents from outside urban areas.

```{r weighted_statistics, results="asis"}

# create survey weights
survey_unweighted <- df %>%
  filter(!is.na(urbanrural)) %>%
  svydesign(ids = ~ 1,
            weights = NULL,
            data = .)

population_distribution <-
  df_cantons %>%
  group_by(urbanrural) %>%
  summarise(Freq = sum(population))

survey_raked <- rake(
  design = survey_unweighted,
  sample.margins = list(~ urbanrural),
  population.margins = list(population_distribution)
)

# calculate descriptive statistics
variables = c(
  "dv_acceptance",
  "dv_turnout",
  "dv_ntrvote",
  "dv_supvote",
  "dv_oppvote",
  "age",
  "female",
  "education",
  "income",
  "urbanrural",
  "cantonyears",
  "climate",
  "polinterest",
  "leftright"
)

datalist <- list()

for (i in 1:length(variables)) {
  dat <- data.frame(
    n = sum(!is.na(survey_unweighted[["variables"]][[variables[i]]])),
    mean = svymean(as.formula(paste("~", variables[i])), design = survey_raked, na.rm = TRUE)[1],
    median = svyquantile(
      as.formula(paste("~", variables[i])),
      na.rm = TRUE,
      design = survey_raked,
      quantile = 0.5
    )[[1]][[1]],
    sd = sqrt(svyvar(
      as.formula(paste("~", variables[i])), na.rm = TRUE, design = survey_raked
    ))[1],
    minimum = svyquantile(
      as.formula(paste("~", variables[i])),
      na.rm = TRUE,
      design = survey_raked,
      quantile = 0
    )[[1]][[1]],
    maximum = svyquantile(
      as.formula(paste("~", variables[i])),
      na.rm = TRUE,
      design = survey_raked,
      quantile = 1
    )[[1]][[1]]
  )
  
  colnames(dat) <-
    c("N", "Mean", "Median", "St. Dev.", "Min", "Max")
  datalist[[i]] <- dat
  
}

# table the data
capture.output({
  as.data.frame(do.call(rbind, datalist)) %>%
    rownames_to_column("Statistic") %>%
    mutate(
      Statistic = factor(
        Statistic,
        levels = c(
          "dv_acceptance",
          "dv_turnout",
          "dv_ntrvote",
          "dv_supvote",
          "dv_oppvote",
          "age",
          "female",
          "education",
          "income",
          "urbanrural",
          "cantonyears",
          "climate",
          "polinterest",
          "leftright"
        ),
        labels = c(
          "Acceptance*",
          "Turnout*",
          "Neutrality*",
          "Supporting Vote*",
          "Opposing Vote*",
          "Age",
          "Female",
          "Education",
          "Income",
          "Urban--Rural",
          "Years in Canton",
          "Climate Worries",
          "Political Interest",
          "Left--Right"
        )
      ),
      Median = sprintf("%.1f", Median),
      Min = sprintf("%.1f", Min),
      Max = sprintf("%.1f", Max)
    ) %>%
    stargazer(
      type = "latex",
      summary = FALSE,
      rownames = FALSE,
      header = FALSE,
      label = "weighted_descriptive_statistics",
      digits = 1,
      title = "Survey-weighted descriptive statistics",
      notes.append = FALSE,
      notes.align = "l",
      notes = "\\parbox[t]{10cm}{\\textit{Note}: * indicates dependent variables.}"
    )
  
}) %>%
  {
    gsub("cccccc", "lcccccc", ., fixed = TRUE)
  } %>%
  cat()

```

\newpage
### Weighted regression models

The statistics in Table \ref{weighted_regressions} are weighted with post-stratification weights to correct for the over-sampling of respondents from outside urban areas.

```{r weighted_regressions, results="asis"}

accept_m5 <-
  svyglm(dv_acceptance ~ iv_location + iv_exposure + iv_politicisation,
         design = survey_raked)

accept_m6 <-
  svyglm(
    dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    design = survey_raked
  )

turnout_m5 <-
  svyglm(dv_turnout ~ iv_location + iv_exposure + iv_politicisation,
         design = survey_raked)

turnout_m6 <-
  svyglm(
    dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    design = survey_raked
  )

ntrvote_m5 <-
  svyglm(dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation,
         design = survey_raked)

ntrvote_m6 <-
  svyglm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    design = survey_raked
  )

capture.output({
  stargazer(
    accept_m5,
    accept_m6,
    turnout_m5,
    turnout_m6,
    ntrvote_m5,
    ntrvote_m6,
    type = "latex",
    title = "Main results with survey-weighted data",
    order = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality",
      "Exposure",
      "Politicisation",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels.include = FALSE,
    column.labels = c("Acceptance", "Turnout", "Neutrality"),
    column.separate = c(2, 2, 2),
    header = FALSE,
    label = "weighted_regressions",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE
  )
  
}) %>%
  {
    gsub(
      "{Neutrality} \\\\",
      "{Neutrality} \\\\ \\cmidrule(lr){2-3} \\cmidrule(lr){4-5} \\cmidrule(lr){6-7}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()

```

\newpage

### Alternative modelling specifications

To facilitate interpretation, we reported results from models estimated with the ordinary least squares method in the main text. As a robustness check, Table \ref{alternative_specifications} re-estimates the models with ordered logistic (for *Acceptance* and *Turnout* as dependent variables) or Poisson (for *Neutrality*, which---unlike the previous two dependent variables---consists of count data) regressions.

```{r alternative_specifications, results="asis"}

accept_m3 <-
  polr(
    factor(dv_acceptance) ~ iv_location + iv_exposure + iv_politicisation,
    data = df,
    Hess = TRUE
  )

accept_m4 <-
  polr(
    factor(dv_acceptance) ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df,
    Hess = TRUE
  )

turnout_m3 <-
  polr(
    factor(dv_turnout) ~ iv_location + iv_exposure + iv_politicisation,
    data = df,
    Hess = TRUE
  )

turnout_m4 <-
  polr(
    factor(dv_turnout) ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df,
    Hess = TRUE
  )

ntrvote_m3 <-
  glm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation,
    data = df,
    family = "poisson"
  )

ntrvote_m4 <-
  glm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df,
    family = "poisson"
  )


capture.output({
  stargazer(
    accept_m3,
    accept_m4,
    turnout_m3,
    turnout_m4,
    ntrvote_m3,
    ntrvote_m4,
    type = "latex",
    title = "Alternative specifications for Figure 2",
    order = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality",
      "Exposure",
      "Politicisation",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels = c("(Ordered Logit)", "(Ordered Logit)", "(Poisson)"),
    model.names = FALSE,
    column.labels = c("Acceptance", "Turnout", "Neutrality"),
    column.separate = c(2, 2, 2),
    header = FALSE,
    label = "alternative_specifications",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE
  )
  
}) %>%
  {
    gsub(
      "{Neutrality} \\\\",
      "{Neutrality} \\\\ \\cmidrule(lr){2-3} \\cmidrule(lr){4-5} \\cmidrule(lr){6-7}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()
                
```

\newpage
### Excluding incomplete cases

The statistics in Table \ref{complete_cases} are calculated with data exclusively from the respondents who answered all related survey questions.

```{r complete_cases, results="asis"}

df_complete <- df %>%
  drop_na(
    dv_acceptance,
    dv_turnout,
    dv_ntrvote,
    iv_location,
    iv_exposure,
    iv_politicisation,
    age,
    female,
    education,
    income,
    urbanrural,
    cantonyears,
    climate,
    polinterest,
    leftright
  )

accept_m7 <-
  lm(dv_acceptance ~ iv_location + iv_exposure + iv_politicisation,
     data = df_complete)

accept_m8 <-
  lm(
    dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df_complete
  )

turnout_m7 <-
  lm(dv_turnout ~ iv_location + iv_exposure + iv_politicisation,
     data = df_complete)

turnout_m8 <-
  lm(
    dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df_complete
  )

ntrvote_m7 <-
  lm(dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation,
     data = df_complete)

ntrvote_m8 <-
  lm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df_complete
  )

capture.output({
  stargazer(
    accept_m7,
    accept_m8,
    turnout_m7,
    turnout_m8,
    ntrvote_m7,
    ntrvote_m8,
    type = "latex",
    title = "Main results when incomplete cases excluded from data",
    order = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality",
      "Exposure",
      "Politicisation",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels.include = FALSE,
    column.labels = c("Acceptance", "Turnout", "Neutrality"),
    column.separate = c(2, 2, 2),
    header = FALSE,
    label = "complete_cases",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE
  )
  
}) %>%
  {
    gsub(
      "{Neutrality} \\\\",
      "{Neutrality} \\\\ \\cmidrule(lr){2-3} \\cmidrule(lr){4-5} \\cmidrule(lr){6-7}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()
                
```

\newpage
### Excluding manipulation check failures

The statistics in Table \ref{manipulation_check} are calculated with data exclusively from the respondents who passed the factual manipulation check.

```{r manipulation_check, results="asis"}

df_fmc <- df %>%
  filter(fmc_result == 1)

accept_m12 <-
  lm(dv_acceptance ~ iv_location + iv_exposure + iv_politicisation,
     data = df_fmc)

accept_m13 <-
  lm(
    dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df_fmc
  )

turnout_m12 <-
  lm(dv_turnout ~ iv_location + iv_exposure + iv_politicisation,
     data = df_fmc)

turnout_m13 <-
  lm(
    dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df_fmc
  )

ntrvote_m12 <-
  lm(dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation,
     data = df_fmc)

ntrvote_m13 <-
  lm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright,
    data = df_fmc
  )

capture.output({
  stargazer(
    accept_m12,
    accept_m13,
    turnout_m12,
    turnout_m13,
    ntrvote_m12,
    ntrvote_m13,
    type = "latex",
    title = "Main results when manipulation check failures excluded from data",
    order = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality",
      "Exposure",
      "Politicisation",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels.include = FALSE,
    column.labels = c("Acceptance", "Turnout", "Neutrality"),
    column.separate = c(2, 2, 2),
    header = FALSE,
    label = "manipulation_check",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE
  )
  
}) %>%
  {
    gsub(
      "{Neutrality} \\\\",
      "{Neutrality} \\\\ \\cmidrule(lr){2-3} \\cmidrule(lr){4-5} \\cmidrule(lr){6-7}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()
                
```

\newpage
### Canton fixed effects

The regression models in Table \ref{fixed_canton} include fixed effects for the respondents' canton of residence.

```{r fixed_canton, results="asis"}

accept_m9 <-
  lm(dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
       canton,
     data = df)

accept_m10 <-
  lm(
    dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright +
      canton,
    data = df
  )

turnout_m9 <-
  lm(dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
       canton,
     data = df)

turnout_m10 <-
  lm(
    dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright +
      canton,
    data = df
  )

ntrvote_m9 <-
  lm(dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
       canton,
     data = df)

ntrvote_m10 <-
  lm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright +
      canton,
    data = df
  )

capture.output({
  stargazer(
    accept_m9,
    accept_m10,
    turnout_m9,
    turnout_m10,
    ntrvote_m9,
    ntrvote_m10,
    type = "latex",
    title = "Main results when models include canton fixed effects",
    keep = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    order = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "age",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality",
      "Exposure",
      "Politicisation",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels.include = FALSE,
    column.labels = c("Acceptance", "Turnout", "Neutrality"),
    column.separate = c(2, 2, 2),
    header = FALSE,
    label = "fixed_canton",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE,
    add.lines = list(c(
      "Canton FEs", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes"
    ))
  )
  
}) %>%
  {
    gsub(
      "{Neutrality} \\\\",
      "{Neutrality} \\\\ \\cmidrule(lr){2-3} \\cmidrule(lr){4-5} \\cmidrule(lr){6-7}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()
                
```

\newpage
### Commune fixed effects

The regression models in Table \ref{fixed_commune} include fixed effects for the respondents' commune of residence.

```{r fixed_municipality, results="asis"}

accept_m11 <-
  lm(dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
       municipality,
     data = df)

accept_m12 <-
  lm(
    dv_acceptance ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright +
      municipality,
    data = df
  )

turnout_m11 <-
  lm(dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
       municipality,
     data = df)

turnout_m12 <-
  lm(
    dv_turnout ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright +
      municipality,
    data = df
  )

ntrvote_m11 <-
  lm(dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
       municipality,
     data = df)

ntrvote_m12 <-
  lm(
    dv_ntrvote ~ iv_location + iv_exposure + iv_politicisation +
      age + female + education + income + urbanrural + cantonyears + climate + polinterest + leftright +
      municipality,
    data = df
  )

capture.output({
  stargazer(
    accept_m11,
    accept_m12,
    turnout_m11,
    turnout_m12,
    ntrvote_m11,
    ntrvote_m12,
    type = "latex",
    title = "Main results when models include municipality fixed effects",
    keep = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "^age$",
      "female",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    order = c(
      "iv_location",
      "iv_exposure",
      "iv_politicisation",
      "^age$",
      "^female$",
      "education",
      "income",
      "urbanrural",
      "cantonyears",
      "climate",
      "polinterest",
      "leftright",
      "Constant"
    ),
    covariate.labels = c(
      "Locality",
      "Exposure",
      "Politicisation",
      "Age",
      "Female",
      "Education",
      "Income",
      "Urban--Rural",
      "Years in Canton",
      "Climate Worries",
      "Political Interest",
      "Left--Right",
      "Constant"
    ),
    omit.stat = c("adj.rsq", "ser", "f"),
    star.cutoffs = c(0.05, 0.01, 0.001),
    dep.var.caption = "",
    dep.var.labels.include = FALSE,
    column.labels = c("Acceptance", "Turnout", "Neutrality"),
    column.separate = c(2, 2, 2),
    header = FALSE,
    label = "fixed_commune",
    digits = 2,
    notes.append = FALSE,
    notes.align = "l",
    no.space = TRUE,
    add.lines = list(c(
      "Commune FEs", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes"
    ))
  )
  
}) %>%
  {
    gsub(
      "{Neutrality} \\\\",
      "{Neutrality} \\\\ \\cmidrule(lr){2-3} \\cmidrule(lr){4-5} \\cmidrule(lr){6-7}",
      .,
      fixed = TRUE
    )
  } %>%
  cat()
                
```



\newpage
## Questionnaire

1.  Which canton and commune do you live in?

    -   Aargau [1] -- Zürich [26]
    -   Aarau [1] -- Zürich [2212]

2.  How long have you been living in this canton?

    -   0 -- 111 years

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

3.  Please indicate your gender.

    -   Male [1]
    -   Female [2]
    -   Other [3]

4.  Please indicate your year of birth.

    -   1908 [111] -- 2001 [18]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

```{=tex}

\begin{center}
[\textit{Additional questions for a separate study}]
\end{center}

```
\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

5.  What is the highest level of education that you have already completed?

    -   Incomplete compulsory school/primary school [1]
    -   Compulsory school [2]
    -   Transitional educational programme [3]
    -   General training without maturity [4]
    -   Elementary vocational training or apprenticeship [5]
    -   Maturity or teacher training school [6]
    -   Post-secondary education, non tertiary [7]
    -   Vocational high school with federal or master certificate [8]
    -   University of applied science, university, ETH [9]
    -   Doctorate, habilitation [10]
    -   Don't know [9999]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

6.  How worried are you about climate change?

    -   Very worried [4]
    -   Somewhat worried [3]
    -   Not very worried [2]
    -   Not at all worried [1]
    -   Don't know [9999]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

7.  How interested are you in politics?

    -   Very interested [4]
    -   Somewhat interested [3]
    -   Not very interested [2]
    -   Not at all interested [1]
    -   Don't know [9999]

8.  In politics people sometimes talk of 'left' and 'right'. Where would you place yourself on the scale below, where 0 means the left and 10 means the right?

    -   0 [0] -- 10 [10]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

9.  To increase the amount of electricity generated from renewable sources of energy, there are proposals to place wind turbines in the canton of [*own* / *different canton*], in landscapes similar to the one pictured below.

```{=tex}

\begin{center}
[\textit{Photograph with} / \textit{without a wind turbine}]
\end{center}

```
> There has been a mixed reaction to these proposals. Some ['people' / 'political parties, such as the Social Democratic Party of Switzerland,'] support these proposals while other ['people' / 'political parties, such as the Swiss People's Party,'] oppose them.

> How about you? Do you support or oppose these wind turbine proposals?

> -   Strongly support [5]
> -   Support [4]
> -   Neither support nor oppose [3]
> -   Oppose [2]
> -   Strongly oppose [1]
> -   Don't know [9999]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

10. [Randomly insert *a*, *b*, or *c*]

```{=html}

<!-- -->

```
a.  Which of the following best describes the landscape photograph that you have seen in the previous question?

    -   It included no wind turbines. [0/1, depending on the vignette]
    -   It included one wind turbine. [0/1, depending on the vignette]
    -   It included two wind turbines. [0]
    -   Don't know [0]

b.  Which location was referenced in the text about wind turbines that you have read in the previous question? [Randomise the order of the answer categories, except '*Don't know*']

    -   [*own canton*] [0/1, depending on the vignette]
    -   [*different canton*] [0/1, depending on the vignette]
    -   [*another canton*] [0]
    -   Don't know [0]

c.  According to the text about wind turbines that you have read in the previous screen, which one of the following actors have disagreements over wind turbine proposals? [Randomise the order of the answer categories, except '*Don't know*']

    -   People [0/1, depending on the vignette]
    -   Political parties [0/1, depending on the vignette]
    -   Energy companies [0]
    -   Don't know [0]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

11. The Swiss federal election is being held on 20 October 2019. How likely is that you will vote?

    -   Very likely [5]
    -   Fairly likely [4]
    -   Neither likely nor unlikely [3]
    -   Fairly unlikely [2]
    -   Very unlikely [1]
    -   Don't know [9999]
    -   I am not eligible to vote [$-9999$]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

[Show if *q11* !$=$ $-9999$; randomise the order of questions; show both *q12* and *q13*]

12. How likely is it that you will vote for the Social Democratic Party of Switzerland?

    -   Very likely [5]
    -   Fairly likely [4]
    -   Neither likely nor unlikely [3]
    -   Fairly unlikely [2]
    -   Very unlikely [1]
    -   Don't know [9999]

13. How likely is it that you will vote for the Swiss People's Party?

    -   Very likely [5]
    -   Fairly likely [4]
    -   Neither likely nor unlikely [3]
    -   Fairly unlikely [2]
    -   Very unlikely [1]
    -   Don't know [9999]

\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

```{=tex}

\begin{center}
[\textit{Additional questions for a separate study}]
\end{center}

```
\begin{center}\rule{0.5\linewidth}{0.2mm}\end{center}

14. What is the gross annual income of your household? Please include all income of all persons who contribute to the maintenance. Count not only wages, but also any other income.

    -   Less than CHF 33,000 [1]
    -   CHF 33,000 -- CHF 48,999 [2]
    -   CHF 49,000 -- CHF 61,999 [3]
    -   CHF 62,000 -- CHF 74,999 [4]
    -   CHF 75,000 -- CHF 87,999 [5]
    -   CHF 88,000 -- CHF 103,999 [6]
    -   CHF 104,000 -- CHF 121,999 [7]
    -   CHF 122,000 -- CHF 145,999 [8]
    -   CHF 146,000 -- CHF 186,999 [9]
    -   CHF 187,000 or more [10]
    -   Don't know [9999]

\newpage
## References